package br.com.proway.cursovipjava.telas;

import java.awt.Color;
import java.awt.Cursor;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.ResultSet;
import java.util.ArrayList;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.text.MaskFormatter;

import br.com.proway.biblioteca.Editora;
import br.com.proway.biblioteca.Estado;

public class CadastrarEditora extends JFrame {


	private JTextField nomeEditora;
	private JTextField siteEditora;
	private JTextField cidadeEditora;
	private JComboBox estado;
	
	

	public CadastrarEditora() throws Exception {
		super();
		setTitle("Programa Treinamento java proway");
		setLocation(100, 100);
		setSize(400, 400);
		setLayout(null);
		setJMenuBar(retornaMenu());
		setContentPane(getConteudo());
		setDefaultCloseOperation(EXIT_ON_CLOSE);
	}


	public JPanel getConteudo() throws Exception {
		JPanel jp = new JPanel();
		jp.setLayout(null);
		jp.setSize(200, 200);
		jp.setBackground(new Color(250, 200, 200));
		jp.add(getLabelNomeEditora());
		jp.add(retornarCampoNomeEditora());

		jp.add(getLabelCidadeEditora());
		jp.add(retornarCampoCidadeEditora());


		jp.add(getLabelSiteEditora());
		jp.add(retornarCampoSiteEditora());

		jp.add(getLabelEstadoEditora());
		jp.add(retornarCampoEstadoEditora());

		
		jp.add(getButtonSalvar());
		jp.add(getButtonLimpar());

		return jp;
	}


	public JTextField getNomeEditora() {
		return nomeEditora;
	}


	public void setNomeEditora(JTextField nomeEditora) {
		this.nomeEditora = nomeEditora;
	}


	public JTextField getSiteEditora() {
		return siteEditora;
	}


	public void setSiteEditora(JTextField siteEditora) {
		this.siteEditora = siteEditora;
	}


	public JTextField getCidadeEditora() {
		return cidadeEditora;
	}


	public void setCidadeEditora(JTextField cidadeEditora) {
		this.cidadeEditora = cidadeEditora;
	}


	public JComboBox getEstado() {
		return estado;
	}


	public void setEstado(JComboBox estado) {
		this.estado = estado;
	}


	public JButton getButtonSalvar() {
		JButton salvar = new JButton("Salvar");
		salvar.setBounds(10, 200, 100, 20);
		salvar.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent arg0) {
				Editora e = new Editora();
				System.out.println(getEstado().getSelectedItem().toString());
				Estado x = new Estado();
				x.setNome(getEstado().getSelectedItem().toString());
				try {
					x.getCodigoFromEstado();
									
					e.cadastrarEditora(getNomeEditora().getText(), getSiteEditora().getText(), x, getCidadeEditora().getText());
				} catch (Exception e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
				try {
					limparCampos();
				} catch (Exception e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
			}
		});
		return salvar;
	}

	public void limparCampos() throws Exception{
		getNomeEditora().setText("");
		getSiteEditora().setText("");
		getCidadeEditora().setText("");
		getEstado().setSelectedIndex(0);
		
	}
	public JButton getButtonLimpar() {
		JButton salvar = new JButton("Limpar");
		salvar.setBounds(150, 200, 100, 20);
		salvar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				getCampoNomeEstado().setText("");
			}
		});
		return salvar;
	}

	public JTextField getCampoNomeEstado() {
		return nomeEditora;
	}

	public JLabel getLabelNomeEditora() {
		JLabel nomeEditora = new JLabel("Nome Editora:");
		nomeEditora.setBounds(10, 10, 100, 20);
		return nomeEditora;
	}

	public JTextField retornarCampoNomeEditora() throws Exception {
		nomeEditora = new JTextField();
		nomeEditora.setBounds(120, 10, 150, 20);
		return nomeEditora;
		
	}

	public JLabel getLabelSiteEditora() {
		JLabel siteEditora = new JLabel("Site Editora:");
		siteEditora.setBounds(10, 50, 100, 20);
		return siteEditora;
	}

	public JTextField retornarCampoSiteEditora() throws Exception {
		siteEditora = new JTextField();
		siteEditora.setBounds(120, 50, 150, 20);
		return siteEditora;
		
	}

	public JLabel getLabelCidadeEditora() {
		JLabel siteEditora = new JLabel("Cidade:");
		siteEditora.setBounds(10, 100, 100, 20);
		return siteEditora;
	}

	public JTextField retornarCampoCidadeEditora() throws Exception {
		cidadeEditora = new JTextField();
		cidadeEditora.setBounds(120, 100, 150, 20);
		return cidadeEditora;
		
	}
	

	public JLabel getLabelEstadoEditora() {
		JLabel estadoEditora = new JLabel("Estado:");
		estadoEditora.setBounds(10, 150, 100, 20);
		
		return estadoEditora;
	}

	public ArrayList<String> consultarEstados() throws Exception{
		Estado e = new Estado();
		ResultSet rs  = e.ConsultarEstado(null);
		ArrayList<String> listas = new ArrayList<String>();
		listas.add("");
		while (rs.next()){
			listas.add(rs.getString("nome"));
		}
		return listas;
	}
	
	public JComboBox retornarCampoEstadoEditora() throws Exception {
		estado= new JComboBox(consultarEstados().toArray());
		estado.setBounds(120, 150, 150, 20);
		return estado;		
	}

	public JMenuItem retornarItemMenuCadastrarEditora() {
		JMenuItem jmenuItem = new JMenuItem("Cadastrar Editora");
		jmenuItem.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent arg0) {
				try {
					CadastrarEditora ce = new CadastrarEditora();
					ce.setVisible(true);
					hide(); 

				} catch (Exception e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				
			}
		});
		
		return jmenuItem;
	}
	
	public JMenuItem retornarItemMenuCadastrarEstado() {
		JMenuItem jmenuItem = new JMenuItem("Cadastrar Estado");
		jmenuItem.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent arg0) {
				try {
					CadastrarEstado ce = new CadastrarEstado();
					ce.setVisible(true);
					hide(); 

				} catch (Exception e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				
			}
		});
		
		return jmenuItem;
	}

	public JMenuItem retornarItemMenuArquivoSair() {
		JMenuItem jmenuItem = new JMenuItem("Sair");
		jmenuItem.setMnemonic('S');
		jmenuItem.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				System.exit(0);
			}
		});
		return jmenuItem;
	}

	public JMenu retornarMenuArquivo() {
		JMenu jmenuArquivo = new JMenu("Arquivo");
		jmenuArquivo.setMnemonic('A');
		jmenuArquivo.add(retornarItemMenuCadastrarEstado());
		jmenuArquivo.add(retornarItemMenuCadastrarEditora());
		jmenuArquivo.add(retornarItemMenuArquivoSair());
		return jmenuArquivo;
	}

	public JMenu retornarMenuEditar() {
		JMenu jmenuArquivo = new JMenu("Listas");
		jmenuArquivo.setMnemonic('E');
		jmenuArquivo.add(retornarItemMenuListarEditora());
		
		return jmenuArquivo;
	}

	private JMenuItem retornarItemMenuListarEditora() {
		JMenuItem jmenuItem = new JMenuItem("Listar Editora");
		jmenuItem.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent arg0) {
				try {
					ListarEditoras ce = new ListarEditoras();
					ce.setVisible(true);
					hide(); 

				} catch (Exception e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				
			}
		});
		
		return jmenuItem; 
	}

	public JMenuBar retornaMenu() {
		JMenuBar jmenubar = new JMenuBar();
		jmenubar.setCursor(new Cursor(Cursor.HAND_CURSOR));
		jmenubar.add(retornarMenuArquivo());
		jmenubar.add(retornarMenuEditar());
		return jmenubar;
	}	
	public static void main(String[] args) throws Exception {
		CadastrarEditora c = new CadastrarEditora();
		c.setVisible(true);
	}

}

